perm filename ERROR[NS,SYS]1 blob
sn#103830 filedate 1974-05-29 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00007 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 TITLE ERROR handler for News Service system
C00003 00003 DATA
C00004 00004 ERROR
C00008 00005 SEND ME A MESSAGE
C00010 00006 WRITE OUT NEW ERROR FILE
C00013 00007 SIXOUT DECOUT OCTOUT ASCOUT PUT2DG PT2DG1 UUCODE
C00015 ENDMK
C⊗;
TITLE ERROR handler for News Service system
F←0
A←1
B←2
C←3
D←4
E←5
L←6
M←7
N←10
Q←11
R←12
W←13
X←14
Y←15
Z←16
P←17
;DATA
CMD: 0↔0 ;DUMP MODE INPUT/OUTPUT COMMANDS GO HERE
ERRORF: SIXBIT /ERRORS/
SIXBIT /TXT/
0↔0
TT1: SIXBIT /CTY/
[ASCIZ /
ππNEWS SERVICE TROUBLEππ
/]
TT2: SIXBIT /CTY/
BUF
TT3: SIXBIT /CTY/
[ASCIZ/
/]
PTY: BLOCK 2
LPDL←←30
PDL: BLOCK LPDL
TMPBUF: BLOCK 200 ;pty input and partial old record from error file goes here
BUF: BLOCK 200 ;error message goes here
WAKEBK: SIXBIT /[-NS-]/
SIXBIT / NSSYS/
0
MONTH:
FOR MON IN (Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec)
{ ASCIZ /MON-/
}
;ERROR
ERROR: EXIT ;STARTED UP BY RUN COMMAND
;NOW EXPECT PROGRAM NAME IN AC 1, UUO IN AC 2
MOVEM A,PRGNAM#
MOVEM B,UUO#
MOVE P,[IOWD LPDL,PDL]
MOVE Q,[POINT 7,BUF] ;BYTE POINTER FOR BUILDING MESSAGE
ACCTIM D, ;GET <DATE>,,<TIME IN SECS>
HLRZ A,D ;GET DATE
IDIVI A,=31 ;DAY INTO B, MONTHS IN A
PUSHJ P,PT2DG1 ;PRINT DAY OF MONTH AS 2 DIGITS
MOVEI C,"-"
IDPB C,Q
IDIVI A,=12 ;MONTH INTO B, YEAR INTO A
MOVEI B,MONTH(B) ;PTR TO ASCIZ MONTH
PUSHJ P,ASCOUT ;PRINT MONTH AS 3 CHARS FOLLOWED BY DASH
MOVEI B,=64(A) ;YEAR
PUSHJ P,PUT2DG
MOVEI C," "
IDPB C,Q
IDPB C,Q
MOVEI A,(D) ;TIME IN SECS
IDIVI A,=60 ;CONVERT TO MINS
HRR D,A ;(SAVE TIME IN MINS FOR WAKEME)
IDIVI A,=60 ;HOURS IN A, MINS IN B
EXCH A,B ;HOURS IN B, MINS IN A
PUSHJ P,PUT2DG ;PRINT HOURS
MOVEI B,(A)
PUSHJ P,PUT2DG ;PRINT MINUTES
MOVEI C," "
IDPB C,Q
IDPB C,Q
MOVE B,PRGNAM
PUSHJ P,SIXOUT ;PRINT NAME OF PROGRAM GETTING ERROR
MOVEI C," "
IDPB C,Q
IDPB C,Q
MOVS A,UUO ;PICK UP UUO
ANDI A,777000 ;CLEAR ALL BUT OPCODE
MOVE B,['MISC ']
CAIE A,(<UDELAY>)
CAIN A,(<UFATAL>)
MOVE B,['FATAL ']
CAIN A,(<UWARN>)
MOVE B,['WARN ']
PUSHJ P,SIXOUT ;PRINT TYPE OF ERROR
MOVE B,['ERROR ']
PUSHJ P,SIXOUT
HRRZ B,UUO ;PICK UP ERROR NUMBER
PUSHJ P,OCTOUT ;AND PRINT IT
CAIE A,(<UDELAY>)
JRST NOWAKE
MOVEI B,[ASCIZ /--WILL TRY AGAIN IN /]
PUSHJ P,ASCOUT
LDB B,[POINT 4,UUO,12] ;PICK UP AMT OF DELAY (AC FIELD OF UUO)
JUMPN B,.+2
SKIPA B,[=30] ;DEFAULT DELAY IS 30 MINUTES
IMULI B,=5 ;AC FIELD GIVES DELAY IN UNITS OF 5 MINUTES EACH
ADDI D,(B) ;ADD DELAY TO CURRENT TIME
PUSHJ P,DECOUT ;PRINT DELAY LENGTH
MOVEI B,[ASCIZ / MINS./]
PUSHJ P,ASCOUT
MOVEI A,=60*=24 ;NUMBER OF MINUTES IN A DAY
CAIG A,(D) ;DELAYING PAST MIDNIGHT?
SUB D,[-1,,=60*=24] ;YES, MAKE IT 24 HRS EARLIER ON NEXT DAY
MOVEM D,WAKEBK+2
MOVEI A,WAKEBK
WAKEME A,
JFCL
NOWAKE: MOVEI C,CR
IDPB C,Q
MOVEI C,LF
IDPB C,Q
SETZ C,
IDPB C,Q
;SEND ME A MESSAGE
PTYGET PTY
JRST NOPTY
MOVEI A,5 ;LOGIN PTJOBX CODE
MOVEM A,PTY+1
PTJOBX PTY ;LOGIN IN THE PTY
JRST NOPTY
MOVEI A,3 ;DOFF PTJOBX CODE
MOVEM A,PTY+1
PTJOBX PTY ;TURN OFF ECHOING
MOVEI A,[ASCIZ \SEND/M ME \]
MOVEM A,PTY+1
PTWRS7 PTY ;SEND AND MAIL ME THE ERROR MESSAGE
MOVEI A,TMPBUF
MOVEM A,PTY+1
PTRDS PTY ;READ FROM PTY
MOVEI A,BUF
MOVEM A,PTY+1
PTWRS7 PTY ;SEND AND MAIL ME THE ERROR MESSAGE
MOVEI C,5 ;NUMBER OF SECS WE WILL WAIT FOR PTY TO FINISH
MOVEI B,1
FINPTY: SLEEP B,
PTOCNT PTY
SKIPN PTY+1 ;ANY CHARS WAITING FOR US
JRST FINPT1 ;NO
MOVEI A,TMPBUF
MOVEM A,PTY+1
PTRDS PTY ;READ FROM PTY
FINPT1: MOVEI A,6
MOVEM A,PTY+1
PTJOBX PTY ;SKIP IF PTY WAITING FOR INPUT
SOJG C,FINPTY
JRST .+2
NOPTY: SETZM PTY
;WRITE OUT NEW ERROR FILE
INIT 0,217
SIXBIT /DSK/
0
EXIT
MOVE A,[ERRORF,,W]
BLT A,Z
LOOKUP 0,W
JRST NOLOOK
MOVS A,Z ;NEGATIVE WORD COUNT
ERR0: SETZB Z,Y
ENTER 0,W
EXIT
MOVN A,A ;POSITIVE WORD COUNT
SETZ B,
LSHC A,-7
JUMPE B,ERR2 ;ANY PARTIAL RECORD WE SHOULD COPY?
ROT B,7 ;YES
MOVN B,B ;NEGATIVE WORD COUNT FOR INPUT OPERATION
HRLI B,BUF-1(B) ;ADDRESS FOR INPUT
MOVSM B,CMD ;DUMP MODE COMMAND
USETI 0,1(A)
IN 0,CMD ;READ IN PARTIAL RECORD
JRST ERR1
EXIT
ERR2: MOVEI B,BUF-1
MOVEM B,CMD ;SET UP OUTPUT ADDRESS FOR DUMP MODE COMMAND
ERR1: USETO 0,1(A) ;RECORD FOR OUTPUT TO COME
SUB Q,CMD ;SUBTRACT INITIAL ADDRESS FROM FINAL ADDRESS
MOVNI Q,(Q) ;NEGATIVE OUTPUT WORD COUNT
HRLM Q,CMD
OUTPUT 0,CMD
RELEAS 0,
SKIPN PTY
EXIT
MOVEI B,1
SKIPA C,[=30] ;NUMBER OF SECS WE WILL WAIT FOR PTY TO FINISH
ERR3: SLEEP B,
PTOCNT PTY
SKIPN PTY+1 ;ANY CHARS WAITING FOR US FROM PTY?
JRST ERR4 ;NO
MOVEI A,TMPBUF
MOVEM A,PTY+1
PTRDS PTY ;READ FROM PTY
ERR4: MOVEI A,6
MOVEM A,PTY+1
PTJOBX PTY ;SKIP IF PTY WAITING FOR INPUT
SOJG C,ERR3
PTYREL PTY
EXIT
NOLOOK: TRNE X,-1 ;NON EX FILE?
EXIT ;NO, GIVE UP
;HERE IS WHERE WE TELL THE CTY THERE IS TROUBLE
MOVEI A,TT1
TTYMES A,
JFCL
MOVEI A,TT2
TTYMES A,
JFCL
MOVEI A,TT3
TTYMES A,
JFCL
SETZ A,
JRST ERR0
;SIXOUT DECOUT OCTOUT ASCOUT PUT2DG PT2DG1 UUCODE
SIXOUT: MOVEI W,6
SIXOU1: SETZ C,
ROTC B,6 ;CHAR INTO C
ADDI C,40 ;MAKE INTO ASCII
IDPB C,Q
SOJG W,SIXOU1
POPJ P,
OCTOUT: IDIVI B,=8
HRLM C,(P)
JUMPE B,.+2
PUSHJ P,OCTOUT
HLRZ C,(P)
ADDI C,"0"
IDPB C,Q
POPJ P,
DECOUT: IDIVI B,=10
HRLM C,(P)
JUMPE B,.+2
PUSHJ P,DECOUT
HLRZ C,(P)
ADDI C,"0"
IDPB C,Q
POPJ P,
ASCOUT: TLOA B,440700 ;MAKE A BYTE PTR
IDPB C,Q
ILDB C,B
JUMPN C,.-2
POPJ P,
PT2DG1: ADDI B,1
PUT2DG: IDIVI B,=10
ADDI B,"0"
IDPB B,Q
ADDI C,"0"
IDPB C,Q
POPJ P,
UUCODE: 0 ;CAUSE AN ILLEGAL UUO IF USER UUO EXECUTED
END ERROR